C# 도움 정보
- 작업 목록 (Task List)
- JSON Async
- 윈도우11 오른쪽 하단 트레이 배터리 잔량 백분율 표시하기
1. 작업 목록 (Task List)
– 토큰을 사용해서 코드 주석을 추적하는 기능
작업 목록을 열려면
1. View > Task List
2. Ctrl+\,T.
토큰과 주석 문법
1. 주석 마커 (//)
2. 토큰 (TODO)
3. 주석
예)
// TODO: Load state from previously suspended application
커스텀 토큰
# 기본 적으로 미리 정의된 토큰
HACK, TODO, UNDONE, and UnresolvedMergeConflict.
# 커스텀 토큰을 만들려면
1. Tools > Options > Environment > Task List
2. 우선순위 설정 가능 (높으면 위로, 낮으면 아래로 표시됨)
Shortcuts
– 작업 목록에서 추적할 수 있는 코드 창에서의 북마크
# shortcut 만들기
1. Edit > Bookmars > Add Task List Shortcut
2. Ctrl + K, H
# shortcut 탐색
View > Next Task, Previous Task
https://learn.microsoft.com/en-us/visualstudio/ide/using-the-task-list?view=vs-2022
https://www.youtube.com/shorts/nj-x9mjXW9I
2. JSON Async
public class SearchRoot
{
public Search[] Search { get; set; }
[JsonProperty(PropertyName = "totalResults")] // 실제로는 totalResults 이나 C# 네이밍 규칙 맞추기 위해서..
public string TotalResults { get; set; }
public string Response { get; set; }
}
public static class Json
{
public static async Task<T> ToObjectAsync<T>(string value)
{
return await Task.Run(() =>
{
return JsonConvert.DeserializeObject<T>(value);
});
}
public static async Task<string> StringifyAsync(object value)
{
return await Task.Run(() =>
{
return JsonConvert.SerializeObject(value);
});
}
}
var result = await client.GetStringAsync(url);
var searchRoot = await Json.ToObjectAsync<SearchRoot>(result);
// From Windows Template Studio
3. 윈도우11 오른쪽 하단 트레이 배터리 잔량 백분율 표시하기
# 1.2 소스
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace percentage
{
class TrayIcon
{
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static extern bool DestroyIcon(IntPtr handle);
private const int fontSize = 18;
private const string font = "Segoe UI";
private NotifyIcon notifyIcon;
public TrayIcon()
{
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem();
notifyIcon = new NotifyIcon();
contextMenu.MenuItems.AddRange(new MenuItem[] { menuItem });
menuItem.Click += new System.EventHandler(MenuItemClick);
menuItem.Index = 0;
menuItem.Text = "E&xit";
notifyIcon.ContextMenu = contextMenu;
notifyIcon.Visible = true;
Timer timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(TimerTick);
timer.Start();
}
private Bitmap GetTextBitmap(String text, Font font, Color fontColor)
{
SizeF imageSize = GetStringImageSize(text, font);
Bitmap bitmap = new Bitmap((int)imageSize.Width, (int)imageSize.Height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.Clear(Color.FromArgb(0, 0, 0, 0));
using (Brush brush = new SolidBrush(fontColor))
{
graphics.DrawString(text, font, brush, 0, 0);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.Save();
}
}
return bitmap;
}
private static SizeF GetStringImageSize(string text, Font font)
{
using (Image image = new Bitmap(1, 1))
using (Graphics graphics = Graphics.FromImage(image))
return graphics.MeasureString(text, font);
}
private void MenuItemClick(object sender, EventArgs e)
{
notifyIcon.Visible = false;
notifyIcon.Dispose();
Application.Exit();
}
private void TimerTick(object sender, EventArgs e)
{
PowerStatus powerStatus = SystemInformation.PowerStatus;
String percentage = (powerStatus.BatteryLifePercent * 100).ToString();
bool isCharging = SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online;
String bitmapText = isCharging ? percentage + "*" : percentage;
using (Bitmap bitmap = new Bitmap(GetTextBitmap(bitmapText, new Font(font, fontSize), Color.White)))
{
System.IntPtr intPtr = bitmap.GetHicon();
try
{
using (Icon icon = Icon.FromHandle(intPtr))
{
notifyIcon.Icon = icon;
String toolTipText = percentage + "%" + (isCharging ? " Charging" : "");
notifyIcon.Text = toolTipText;
}
}
finally
{
DestroyIcon(intPtr);
}
}
}
}
}
https://github.com/kas/percentage
시작프로그램에 등록해야만 재부팅시 자동으로 표시됩니다.
시작메뉴 경로인
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
이곳에 다운 받으신 파일을 넣어주면 됩니다.
https://www.clien.net/service/board/lecture/17827548?od=T31&po=0&category=0&groupCd=